手机刷机包中的uboot.bin文件怎么解压出里面的文件

您所在的位置:网站首页 emmc cid 手机刷机包中的uboot.bin文件怎么解压出里面的文件

手机刷机包中的uboot.bin文件怎么解压出里面的文件

2023-04-22 20:06| 来源: 网络整理| 查看: 265

刷机包的文件是不需要解压就可以刷机的。

Recovery模式刷机方法:

步骤一、首先要确定手机是否刷入了Recovery ,如果没有的需要刷入Recovery才能进入Recovery进行刷机。

步骤二、然后在进入设置把USB调试关闭掉,把刷机包复制到SD卡里面。关闭了USB调试才能读取出来手机内存。

步骤三、然敏雀后在进入recovery模式,进入recovery模式的按键有的不一样。有的可以从电脑控制进入recovery模式,有的按着开机键+音量键就能进入recovery模式。进入recovery模式之后先清除所有的数据。

步骤四、然后在清除手机里面的缓存数据,这些操作上下就可以使用音量键调节。确定就是开机键。

步骤五、然后在选择刷机包,一般是装在SD卡上面的。所以从桥咐早SD卡上面选择刷机包。

步骤六、刷机包是ZIP文件,点击从SD卡上面选简握择ZIP文件。然后选择刷机包的文件点击确定即可。

开发板的最大内存寻址范围。这样就OK了。重新编译烧写启动后,输出如下:

U-Boot 2016.11-gbf241c8 (Mar 04 2017 - 06:46:50 +0800) for TINY4412

CPU: Exynos4412 @ 1.4 GHz

Model: Insignal Tiny4412 evaluation board based on Exynos4412

Board: Insignal Tiny4412 evaluation board based on Exynos4412

DRAM: 1 GiB

WARNING: Caches not enabled

MMC: DWMMC56: Can't get the dev index

exynos_dwmci_process_node: failed to decode dev 0

SAMSUNG SDHCI: 0

sdhci_transfer_data: Error detected in status(0x208002)!

sdhci_transfer_data: Error detected in status(0x208002)!

sdhci_transfer_data: Error detected in status(0x208000)!

*** Warning - read failed, using default environment

Hit any key to stop autoboot: 0

sdhci_transfer_data: Error detected in status(0x208002)!

sdhci_transfer_data: Error detected in status(0x208002)!

sdhci_transfer_data: Error detected in status(0x208000)!

SD/MMC found on device 0

** ext4fs_devread read error - block

Failed to mount ext2 filesystem...

** Unrecognized filesystem type **

** ext4fs_devread read error - block

Failed to mount ext2 filesystem...

** Unrecognized filesystem type **

** ext4fs_devread read error - block

Failed to mount ext2 filesystem...

** Unrecognized filesystem type **

Wrong Image Format for bootm command

ERROR: can't get kernel image!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

上面有两处需要修复的:

第一姿薯枣点是:

DWMMC56: Can’t get the dev index

exynos_dwmci_process_node: failed to decode dev 0

第二点是:

sdhci_transfer_data: Error detected in status(0x208002)!

sdhci_transfer_data: Error detected in status(0x208002)!

sdhci_transfer_data: Error detected in status(0x208000)!

首先解决第一点,看输出是因为没有给EMMC添加相应的节点,导致在解析的时候手亮出问题了,查看Tiny4412的设备树文件,会发现确实没有给EMMC添加设备描述迹拆,我们添加下面的信息就可以解决找不到节点的问题了。

diff --git a/arch/arm/dts/exynos4210-tiny4412.dts b/arch/arm/dts/exynos4210-tiny4412.dts

index a4fe14f..77934e5 100644

--- a/arch/arm/dts/exynos4210-tiny4412.dts

+++ b/arch/arm/dts/exynos4210-tiny4412.dts

@@ -49,4 +49,14 @@

sdhci@12540000 {

status = "disabled"

}

+

+ dwmmc@12550000 {

+ samsung,bus-width = 8

+ samsung,timing = 2 1 0

+ samsung,removable = 0

+ fifoth_val = 0x203f0040

+ bus_hz = 400000000

+ div = 0x3

+ index = 4

+ }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

那么第二个问题才是最大的问题,我自己解决了很久,也科学上网去查找过相关的信息,但是都没有解决,所以,是的,我是来求助的,因为我真的是知识有限,没有办法解决啊,不过还是尝试过很多办法的,下面也和大家分享一下吧:

之前看到这样一个帖子:

http://u-boot.10912.n7.nabble.com/Bisected-quot-sdhci-transfer-data-Error-detected-in-status-0x208002-quot-problem-on-ODROID-X-td231188.html

就是显示解决这个问题的,我按照帖子中的说明进行了如下修改:

diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c

index 3d31f9d..a8fc72a 100644

--- a/arch/arm/mach-exynos/clock.c

+++ b/arch/arm/mach-exynos/clock.c

@@ -1688,8 +1688,8 @@ unsigned long get_mmc_clk(int dev_index)

void set_mmc_clk(int dev_index, unsigned int div)

{

/* If want to set correct value, it needs to substract one from div.*/

- if (div 0)

- div -= 1

+// if (div 0)

+// div -= 1

if (cpu_is_exynos5()) {

if (proid_is_exynos5420() || proid_is_exynos5422())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

然后上面显示的error都没有显示了,而且执行saveenv,显示done,执行mmc read/write显示的都是done,但是验证的时候发现都没有效果,我是通过执行mmc read 0x43E00000 0x800 0x100,意思是将mmc设备中第2048个block开始,读取256个block到内存0x43E00000,即u-boot执行的首地址处,然后在执行go 0x43E00000,如果mmc设备正常的话,通过上面的操作,0x43E00000位置的内容应该要被覆盖,那么go 0x43E00000操作后,开发板应该是宕机才对的,但是开发板是重新执行了uboot的初始化过程,因此看起来像是mmc设备还是没有初始化成功啊,起码mmc write/read都不能正常执行。

所以如果有哪位朋友也遇到过这种情况,还请和大家分享一下啊,谢谢!

如果因为uboot或者内核有错误而局岁导致启动失败,出现卡死状态等,那么需要判断问题是出在uboot阶段还是linux阶段,这可以通过观察启动过程中的debug信息来判断,

如果uboot出现问题是比较麻烦的,因为这需要有一个装有正确的uboot/bootloader的flash芯片作为引导,

将系统重新引导至uboot界面中,之后再重新烧写uboot到系统本身的flash中,进而烧写内核(如有必要)。

一,重新烧写uboot

首先需要一个特定的PCLL(flash芯片),这个PCLL上固化了一个正确的bootloader, 通过这个bootloader可以成功进入bootloader界面, 在此条件下重新烧写uboot/bootloader。

使用此PLCC的步骤是:

在系统下电情况下, 使用跳线/拨码开关等将此系统的启动方式变从外部flash(即PLCC)引导,

之后将系统上电, 这时会从PLCC 启动。

启动成功后,进入uboot界面, 即命令行显示Dream 5220# #(类似命令行提示符)

此时将版卡的启动方式变为 从 nor flash 启动。 之后重新烧写uboot到此nor flash 上。

再用 kermit 来操作。

Kermit是一个串口服务工具,类似与minicom ,功能比minicom 多。

//kermit/usb0.cfg 是kermit 的配置文件, 在其中可以配置 /dev/ttyUSB0 等路径

kermit -y kermit/usb0.cfg

-y kermit/usb0.cfg 指定配置文件。

该文件内容如下:

/*

set line /dev/ttyUSB0

set speed 115200

set carrier-watch off

set hardshake none

set flow-control none

robust

set file type bin

set file name lit

set rec pack 1000

set send pack 1000

set window 5

*/

将此文件保存在主目录下, 命名为:kermit/usb0.cfg(可自定义)

执行后进入kermit 界面, 按 c

进入 串口界面(就是设备的界面)

切换回kermit 界面快捷键:Ctrl + \ , 之后再按 c 。

执行:

Dream 5220# # detect

显示:

Checking for NOR flash...

Flash detect 33554432Mb

这说明flash状态良好。

//让串口进入接受状态。

Dream 5220# # loadb

进入kermit 界面: ctrl + \ 按 c

执行:

send uboot.bin

就是将当前目录下的uboot.bin 文件发送给串口。

完成后,进入串口界面。

执行:

Dream 5220# # upgrade 0x20000000 0x1dc00000 +0xe0000

0x20000000 是 kermit 执行 send 后 将文件send 到的默认地址。

再将文件写到nor flash 的首地址:0x1dc00000 +0xe0000为写的长度。

执行:reset。让系统重启。

/*

至此,新的uboot烧写完成,reset后, 如果还是不成功的话,那么问题肯定出在linux的的启动阶段或者新的uboot还是有问题,这可以通过启动过程中的debug信息看出来

一,如果内核有问题,导致linux没有进入shell界面,要重新进入Uboot环境,就是在reset 之后,一直按 ctrl + c ,这样在uboot启动完成后, 不会进入kernel的启动阶段,而是停留在uboot的命令行中册行,

在这个uboot 环境下,烧写新内核, 配置ipaddr,serverip等,同最开始的例子中操作是一样的。

//本机uboot 的ip地址

setenv ipaddr 10.10.167.10

//服务器ip地址

setenv serverip 10.10.167.249

//下载linux内核vmlinux52

// 在州腊哗服务器的tftpboot目录下存在相应文件,搭建到tftp服务环境

tftpboot 0 vmlinux52

// 烧写到flash 上。

// 0x20000000 是vmlinux52的存贮位置。

// 0x1dd00000 是系统内核的起始位置(每个设备位置不同),

// +0x600000是文件长度

upgrade 0x20000000 0x1dd00000 +0x600000

在reset 之前,一般还要设置一下环境变量。

比如

setenv linux_args mtdparts=octeon_nor0:1m(BOOT),7m(LINUX),21m(CONFIG),3m(MD)

setenv bootcmd 'bootoctlinux 0x1dd00000 coremask=0x3 mem=700'

//保存

saveenv

bootoctliux

二 ,如果新烧写的uboot本身有问题,那么修改uboot代码,编译通过后, 使用PLCC重复上述烧写过程。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://outofmemory.cn/tougao/8210130.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3